# @Time    : 2023/3/24 15:52
# @Author  : SunJian
# @Email   : 330160114@qq.com
# @File    : 面试抽取.py
# @Software: PyCharm
"""
文件说明：

"""
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2023/3/23 18:49
# @Author  : 小马
# @File    : two.py
# @Description :
import redis
import random

from django_redis import get_redis_connection
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "meiduo_mall.settings.dev")


topic = {
    '1': '什么是sql注入攻击？举一个攻击的例子，如何防范',
    '2': '为什么要减少IO操作',
    '3': '为什么使用缓存？如何使用django的缓存，如何从缓存中读取数据、如何存入数据、如何删除数据，哪个模块 core.cache',
    '4': '什么是GIL，GIL带来的影响，GIL是线程安全的吗 ，为什么',
    '5': '请说说web常见的攻击手段和防范措施',
    '6': '设计模式了解吗（至少3个模式，以及每个模式的作用应用场景）',
    '7': 'redis数据类型，说明每种适合的业务场景',
    '8': '8.TCP三次握手和四次挥手说明',
    '9': '什么是python装饰器，用到了什么原理（闭包，解释闭包），如何手写一个装饰器？',
    '10': '什么是 C/S、B/S 架构',
    '11': '11.请说下django中的中间件',
    '12': '12.django的请求生命周期',
    '13': '13.sql语句中什么时候用where什么时候用having',
    '14': '14.DRF 框架优点，给你的项目带来了哪些方便，举例说明',
    '15': '15.简单说下ER图是什么',
    '16': '16.什么是SPU什么是SKU',
    '17': '17.简单叙述下QQ登录的流程（3分钟以上）',
    '18': '18.简单说下django怎么实现发送邮箱和邮箱验证',
    '19': '19.XML、JSON、YAML是什么，各自规则和优点',
    '20': '20.能够简单说下什么是时间戳吗，如何获取当前时间戳',
    '21': '21.能够说下什么是MVT吗（2分钟以上）',
    '22': '22.内网外网的区别',
    '23': '23.简单说几个python中的魔法方法（3个以上）',
    '24': '24.django中的F查询和Q查询是什么',
    '25': '25.怎么实现添加收货地址的省市区三级分类，流程',
    '26': '26.sql语句中的分组怎么使用',
    '27': '27.django的模板语言什么场景下使用，怎么配置？模板语言的语法规则，有哪些过滤器',
    '28': '28.队列和栈这两种数据结构的区别，分别举一个实际应用场景，即用在什么地方？',
    '29': 'Python中的逻辑运算符，分别解释用法',
    '30': 'Python 列表中append，insert和extend的区别?',
    '31': 'restful   Rest      api 的规范',
    '32': 'cookie和session的区别',
    '33': '虚拟环境的作用，如何创建虚拟环境，如何退出虚拟环境',
    '34': '数据库表设计中，什么是自关联？哪个地方可以用到自关联，django模型类中，自关联怎么写？',
    '35': '路由转换器是什么？什么作用，如何自定义路由转换器',
    '36': '写一个正则表达式，识别2023年3月22日，2023年3月21日这样的日期格式，该怎么写',
    '37': '验证码实现原理(2分钟）',
    '38': '同步和异步的区别，并行和并发的区别。',
    '39': '什么是笛卡尔积？在表和表关联的时候，如何避免笛卡尔积？',
    '40': 'left join 和 right join 的区别',
    '41': 'celery是什么？为什么用？什么时候会想到用？怎么使用，注意哪些问题，项目中用来解决什么了',
    '42': 'django内置的认证中，如何保持登录状态？如何退出，如何判断用户名密码是否匹配？',
    '43': '什么是递归？递归可以用来解决哪些问题，如何扫描遍历文件夹？',
    '44': 'SMTP是什么，有什么功能，怎么使用',
    '45': '跨域问题怎么产生的，如何解决跨域问题',
    '46': '日志的作用，如何配置日志，日志有哪些级别',
    '47': '短信验证码的流程，如何判断用户填写的验证码是否正确，如何避免频繁发送短信（前后端都要考虑）',
    '48': '什么是有序字典，和普通字典有什么区别',
    '49': 'django 模型类日期字段 ，auto_now_add，auto_now分别什么作用，用在什么场合？',
    '50': '七牛云是什么，为什么使用，怎么使用？',
    '51': 'Linux定时任务命令是什么？怎么使用？ 提示：crontab',
}
# rds = redis.Redis(db=0, decode_responses=True)
rds = get_redis_connection("mianshi")
#rds.sadd('stuname', '张照辉', '张智', '张胜山', '都众杰', '张洋赫', '冯彬煊', '张晓萌', '马欢', '许超朋', '黄卫','熊乾元', '刘云涛', '缪凯琳', '邬晓宇', '靳磊一', '马艳鹏', '陈新闯', '王佳豪', '李智豪', '朱天奇', '韩俊文', '朱硕', '韩梦岩', '郭贺璐','赵宇航', '王光阳', '孙旭阳', '李威' )

a = rds.smembers('stuname')
c = rds.scard('stuname')
d = random.randint(1, c - 1)
print(c)
student = []
g = random.randint(8, 9)
num = 0
for i in a:
    num += 1
    if num == d:
        e = i
        student.append(
            {'name': e, '题目': [{f'第{i + 1}题': topic.get(str(random.randint(1, 50)))} for i in range(g)]})
        print(e)
        for i in student:
            h = i.get('题目')
            for j in h:
                print(j)
                rds.srem('stuname', e)


